Software-defined networks (SDN) have emerged as a promising new technology. In SDNs, network control is decoupled from forwarding and is directly programmable, e.g., by separating the control plane from the data plane and implementing the control plane using software applications and a centralized SDN controller, which may make the routing decisions and communicate these decisions to all the devices on the network. This migration from tightly bound individual network device control to control using accessible computing devices has enabled the underlying infrastructure to be abstracted for applications and network services, permitting treatment of the network as a logical or virtual entity.
SDN architecture networks may be divided into multiple logical layers: networking devices (e.g., routers, switches, servers, etc.), Networking Operating Systems (NOSs), SDN controllers, and user applications. SDN controllers are software modules built over NOS in network systems, and may provide platforms for users to write applications and services via Application Programming Interfaces (APIs). One goal of SDNs is to simplify the existing network software systems and provide an open platform for developing user applications. However, present SDN architectures do not efficiently utilize the limited network resources.